import db from './db'
import md5 from 'js-md5'
import { pick } from '@/utils'
import { mock } from 'mockjs'
import jwt from 'jsonwebtoken'

// POST 验证登录 参数 username password
mock('admin/login', 'post', (payload) => {
  const { username, password } = JSON.parse(payload.body)

  // 查询管理状态 1 为未审核  2为已审核
  const stateResult = db.some('gx_admin', item => item.username === username && item.state === 1)
  if (stateResult) return { err: 10003, desc: '您的用户尚未审核！' }

  // 查询登录
  const loginResult = db.some('gx_admin', item => {
    return item.username === username &&
           item.password === md5(password)
  })

  // 说明存在此用户
  if (loginResult) {
    let token = ''
    try {
      // 登录成功颁发授权码 token expiresIn 过去时间
      // 1d 表示1天后
      // 1h 表示1小时后
      // 1s 表示1秒后  10s表示10秒后过期
      token = jwt.sign({ data: username }, '0513', { expiresIn: '10d' })
    } catch (err) {
      console.log(err)
    }
    return { err: 0, token, desc: '登录成功！' }
  } else {
    return { err: 10001, desc: '用户名或者密码错误！' }
  }
})

// GET 获取当前登录用户信息
mock('admin/info', 'get', () => {
  try {
    const token = localStorage.getItem('Gx-Token')
    const { data: username } = jwt.verify(token, '0513')
    const result = db.selectOne('gx_admin', item => item.username === username)
    return {
      err: 0,
      desc: '执行成功',
      result: pick(result, ['avatar', 'username', 'nickname'])
    }
  } catch (err) {
    console.error(err)
  }
})

mock('admin/list', 'get', () => {
  return {
    err: 0,
    desc: '执行成功！',
    result: db.select('gx_admin')
  }
})

// POST用户状态,
mock('admin/state', 'post', (payload) => {
  const { id, state } = JSON.parse(payload.body)
  return {
    err: 0,
    desc: '执行成功！',
    // 修改数据库内容
    result: db.put('gx_admin', id, { state })
  }
})

// POST用户删除
mock('admin/remove', 'post', (payload) => {
  const { ids } = JSON.parse(payload.body)
  return {
    err: 0,
    desc: '执行成功！',
    // 删除数据库内容
    result: db.delete('gx_admin', ids)
  }
})

// POST 用户新增
mock('admin/add', 'post', (payload) => {
  const { password, ...form } = JSON.parse(payload.body)
  return {
    err: 0,
    desc: '执行成功！',
    result: db.add('gx_admin', { ...form, password: md5(password) })
  }
})

// POST 用户修改
mock('admin/edit', 'post', (payload) => {
  const { id, password, ...form } = JSON.parse(payload.body)
  return {
    err: 0,
    desc: '执行成功！',
    result: db.put('gx_admin', id, Object.assign(form, password ? { password: md5(password) } : false))
  }
})
